home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / cpp_libs / varia / silo.lha / silo / Test.c < prev   
C/C++ Source or Header  |  1993-08-08  |  2KB  |  95 lines

  1. /* $Author: ecsv38 $ $Date: 90/08/21 14:46:11 $ $Revision: 1.2 $ */
  2. /* (c) S. Manoharan  sam@lfcs.edinburgh.ac.uk */
  3.  
  4. /* Reference --
  5. @book{MacDo87,
  6.    author =    "M H MacDougall",
  7.    year =    "1987",
  8.    publisher =    "MIT Press",
  9.    title =    "Simulating Computer Systems: Techniques and Tools"
  10. }
  11. -- */
  12.  
  13.  
  14. #include "Sim.h"
  15.  
  16. #include <std.h>
  17. #include <new.h>
  18. #include <MLCG.h>
  19. #include <DiscreteUniform.h>
  20.  
  21.  
  22. int main(int argc, char **argv)
  23. {
  24.    MLCG gen;
  25.    DiscreteUniform sample(0, 20, &gen);
  26.  
  27.    int Debug_flag = 0;
  28.  
  29.  
  30.    set_new_handler(freeStoreException);
  31.  
  32.    const double MAXTIME = 500;
  33.  
  34.    Resource server(1, "Server");
  35.    Entity customer("Customer");
  36.    const int ARRIVAL = 1;
  37.    const int DEPART  = 2;
  38.    const int RESERVE = 3;
  39.  
  40.    double delay, inst; Event *event;
  41.  
  42.    Event *ev = new Event(ARRIVAL);
  43.    customer.schedule(0, ev);
  44.    while ( simtime() < MAXTIME ) {
  45.       event = cause(); inst = simtime();
  46.       if ( event == 0 ) {
  47.      cout << form("%s: no more events to process\n", argv[0]);
  48.      exit(0);
  49.       }
  50.       else cout << form("[%g]\t** event %d (id %d) caused\n",
  51.      inst, event->type(), event->id());
  52.  
  53.       switch ( event->type() ) {
  54.       case ARRIVAL :
  55.      cout << form("[%g]\tArrival\n", inst);
  56.  
  57.      ev = new Event(RESERVE);
  58.      cout << form("[%g]\tscheduling a RESERVE\n", inst);
  59.      customer.schedule(0, ev);
  60.  
  61.      ev = new Event(ARRIVAL);
  62.      delay = sample();
  63.      cout << form("[%g]\tscheduling an ARRIVAL after %g\n",
  64.         inst, delay);
  65.      customer.schedule(delay, ev);
  66.  
  67.      break;
  68.       case RESERVE :
  69.      cout << form("[%g]\tReserve\n", inst);
  70.      if ( server.reserve(&customer, event->type()) ) {
  71.         ev = new Event(DEPART);
  72.         delay = sample();
  73.         cout << form("[%g]\tscheduling a DEPART after %g\n",
  74.            inst, delay);
  75.         customer.schedule(delay, ev);
  76.      }
  77.      else
  78.         cout << form("[%g]\tserver busy now\n", inst);
  79.      break;
  80.       case DEPART :
  81.      cout << form("[%g]\tDepart\n", inst);
  82.      server.release(&customer);
  83.      break;
  84.       default :
  85.      cout << form("%s: invalid event %d detected\n",
  86.         argv[0], event->type());
  87.      break;
  88.       }
  89.  
  90.       delete event;
  91.    }
  92.  
  93.    return 0;
  94. }
  95.